package com.t.bricks.bussiness.controller.bridge;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import com.t.bricks.bussiness.service.bridge.IgnoreURLService;
import com.t.bricks.model.MsgEmity;

/**
 * 用户权限验证,非内部请求的访问都需要进行
 * @author huangxinbian
 */
@ConditionalOnMissingClass("com.t.bricks.bussiness.controller.ignoreurl.IgnoreURLController")
@RestController
@Api(value="免拦截桥接服务", tags={"桥接服务-免拦截桥接操作接口"})
public class IgnoreURLController {
	
	@Autowired
	private IgnoreURLService ignoreURLService;

	/**
	 * 根据记录编号取对象
	 * @param sId 记录编号
	 * @return
	 */
	//[start]
	@ApiOperation(value="根据记录编号取对象")
	@ApiResponses({
		@ApiResponse(code=200, message="{\"success\": 布尔值, \"msg\": 文字提示, \"data\": 码值|Json数据对象}"),
		@ApiResponse(code=400, message="错误的请求,请检查路径"),
		@ApiResponse(code=404, message="请求路径没有或页面跳转路径不对"),
		@ApiResponse(code=1000001, message="内部请求密钥错误"),
		@ApiResponse(code=1000002, message="您还没有登录或登录已超时,需要重新登录"),
		@ApiResponse(code=1000003, message="检查登录状态失败,请稍后重试！"),
		@ApiResponse(code=1000004, message="请求的操作不存在,请检查访问地址正确性，如大小写"),
		@ApiResponse(code=1000005, message="响应后在系统内部发生不可预知的错误"),
		@ApiResponse(code=1019000, message="1019000~1999999为拦截器调用方法错误"),
		@ApiResponse(code=8001, message="编号参数能为空"),
		@ApiResponse(code=7001, message="数据不存在"),
		@ApiResponse(code=7002, message="查询发生异常"),
		@ApiResponse(code=7003, message="7003~8998为修改时发生的其它错误")
	})
	//[end]
	@RequestMapping(method={RequestMethod.POST}, value="/ignore/url/find/id")
	public MsgEmity findById(HttpServletRequest request, String sId) {
		return ignoreURLService.findById(sId);
	}
	
	/**
	 * 验证指定url是否在可忽略的访问路径中(给内部拦截器用,直接返回Boolean)
	 * @param sUrl 待检验的url
	 * @param isMustLogin 是否必须登录
	 * @return
	 */
	//[start]
	@ApiOperation(value="内部方法:验证url是否可免于拦截", notes="注意:限制为内部系统(生产者系统)访问")
	@ApiImplicitParams({
		@ApiImplicitParam(name="sUrl", value="待检验的url", dataType="String", paramType="query", required=true),
		@ApiImplicitParam(name="iMustLogin", value="是否必须登录,1:是;2:否", dataType="Integer", paramType="query", required=false),
		@ApiImplicitParam(name="sUserType", value="待检验的用户类型", dataType="String", paramType="query", required=false)
	})
	@ApiResponses({
		@ApiResponse(code=200, message="boolean"),
		@ApiResponse(code=400, message="错误的请求,请检查路径"),
		@ApiResponse(code=404, message="请求路径没有或页面跳转路径不对"),
		@ApiResponse(code=1000001, message="内部请求密钥错误"),
		@ApiResponse(code=1000002, message="您还没有登录或登录已超时,需要重新登录"),
		@ApiResponse(code=1000003, message="检查登录状态失败,请稍后重试！"),
		@ApiResponse(code=1000004, message="请求的操作不存在,请检查访问地址正确性，如大小写"),
		@ApiResponse(code=1000005, message="响应后在系统内部发生不可预知的错误"),
		@ApiResponse(code=1019000, message="1019000~1999999为拦截器调用方法错误")
	})
	//[end]
	@RequestMapping(method={RequestMethod.POST}, value="/ignore/url/check")
	public boolean checkIgnoreUrl(String sUrl, Integer iMustLogin, String sUserType) {
		return ignoreURLService.checkIgnoreUrl(sUrl, iMustLogin, sUserType);
	}
	
	/**
	 * 清理缓存
	 * @return
	 */
	//[start]
	@ApiOperation(value="清理缓存", notes="直接操作数据库的情况下需要手工更新缓存")
	@ApiResponses({
		@ApiResponse(code=200, message="{\"success\": 布尔值, \"msg\": 文字提示, \"data\": 码值}"),
		@ApiResponse(code=400, message="错误的请求,请检查路径"),
		@ApiResponse(code=404, message="请求路径没有或页面跳转路径不对"),
		@ApiResponse(code=1000001, message="内部请求密钥错误"),
		@ApiResponse(code=1000002, message="您还没有登录或登录已超时,需要重新登录"),
		@ApiResponse(code=1000003, message="检查登录状态失败,请稍后重试！"),
		@ApiResponse(code=1000004, message="请求的操作不存在,请检查访问地址正确性，如大小写"),
		@ApiResponse(code=1000005, message="响应后在系统内部发生不可预知的错误"),
		@ApiResponse(code=1019000, message="1019000~1999999为拦截器调用方法错误"),
		@ApiResponse(code=8001, message="没有启用缓存"),
		@ApiResponse(code=8002, message="试图删除所有用户的'关联权限信息'缓存失败"),
		@ApiResponse(code=8003, message="试图删除用户的'关联权限信息'缓存失败"),
		@ApiResponse(code=8004, message="8004~8998其它操作的异常错误"),
		@ApiResponse(code=8999, message="删除缓存成功")
	})
	//[end]
	@RequestMapping(method={RequestMethod.POST}, value="/ignore/url/clear/cache")
	public MsgEmity clearCache() {
		return ignoreURLService.clearCache();
	}
	
}
